【チュートリアル】Ansible を使用したエンタープライズ級高可用性 K8S クラスターのデプロイ
これは開発ドキュメントであり、開発者および AI を対象としています。私のドキュメントサイトからの転載です。原文のURLは以下の通りです:
本稿の開発環境は Linux システムです。ファイルの編集には micro cli を使用しています。ご自身のシステム環境に合わせて調整してください。
基本概念
Ansible について
Ansible はエージェントレスの自動化ツールであり、構成と変更を明確で再現可能なタスクとして記述します。複数のホストにわたる一貫した構成管理に優れており、アプリケーションのデプロイや一括操作にも適しています。ロードバランサーと組み合わせることで、複雑な変更を制御可能なローリングステップに分割できます。
Ansible は HAProxy のデプロイと管理に非常に適しています。

Kubernetes と RKE2 について
Kubernetes(K8s) はコンテナオーケストレーションシステムであり、スケジューリング、サービスディスカバリ、ローリングアップデート、自己修復などのコア機能を担当します。その目標は、分散アプリケーションの実行方法を標準化し、運用プロセスをより制御可能にすることです。
RKE2 (RKE Government) は Rancher が提供する Kubernetes ディストリビューションであり、コンプライアンス基準に準拠し、デフォルトでセキュリティとコンプライアンスを重視しているため、本番環境に適しています。

Rocky Linux と SELinux について
Rocky Linux はオープンソースのエンタープライズ級オペレーティングシステムであり、RHEL とのバグレベルの互換性を維持することを目標としています。ライフサイクルが安定しており、長期運用される本番クラスターに適しています。

SELinux は強制アクセス制御 (MAC) メカニズムであり、プロセスとリソースのアクセス境界を細かく制限するために使用されます。Rocky Linux ではデフォルトで有効かつ enforcing モードになっており、無効にするのではなくポリシーに従って設定することをお勧めします。

入門
Ansible のインストール
Ansible をインストールします (yay を例にします):
yay -S ansible
ansible --version を実行してバージョン情報を確認できます。
yun@yun ~/V/a/yunzaixi-dev (main)> ansible --version
ansible [core 2.20.0]
config file = None
configured module search path = ['/home/yun/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.13/site-packages/ansible
ansible collection location = /home/yun/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/bin/ansible
python version = 3.13.7 (main, Aug 16 2025, 15:55:01) [GCC 15.2.1 20250813] (/usr/bin/python)
jinja version = 3.1.6
pyyaml version = 6.0.3 (with libyaml v0.2.5)
Ansible は Python ベースで実装されているため、Ansible をインストールする前に開発環境に Python 環境が設定されていることを確認してください。
lablabs.rke2はnetaddrPython パッケージに依存しているため、別途インストールが必要です。Arch Linux の場合はsudo pacman -S python-netaddrを使用できます。
バージョン管理ツールのインストール
git, gh をインストールします (yay を例にします):
yay -S git github-cli
git version と gh version を実行してバージョン情報を確認できます。
yun@yun ~/V/a/yunzaixi-dev (main)> git version
git version 2.52.0
yun@yun ~/V/a/yunzaixi-dev (main)> gh version
gh version 2.83.1 (2025-11-13)
https://github.com/cli/cli/releases/tag/v2.83.1
Github にログインします:
gh auth login --scopes workflow
プロンプトに従って操作してください。
クラウドサーバーの準備
すべてを始める前に、クラスターをデプロイするためのクラウドサーバーを準備する必要があります。最小構成の本番級 HA(コントロールプレーン + etcd)は通常、3 台の rke2-server(組み込み etcd)と少なくとも 1 台の rke2-agent で構成されます。したがって、次のステップに進むには少なくとも 4 台のクラウドサーバーが必要です。
運用の利便性のため、すべてのシステムを RockyLinux に統一します。
RockyLinux を選択する理由: オープンソースで無料のエンタープライズ級オペレーティングシステムであり、RHEL と 100% の互換性があり、RKE2 のサポートマトリックスに含まれているためです。
RKE2 は非常に軽量ですが、いくつかの最小要件があります:
- 2 つの RKE2 ノードが同じノード名を持つことはできません。デフォルトでは、ノード名はマシンのホスト名から取得されるため、Linux クラウドサーバーのホスト名は重複しないようにしてください。
- 各クラウドサーバーは、少なくとも 2 Core CPU、4 GB RAM を備え、SSD をハードディスクとして使用する必要があります。
- ファイアウォールの特定のポートを開放してください。
SSH Config の設定
システムの SSH Config に以下のコードを追加してください (HostName にはクラウドサーバーのパブリック IP アドレスを入力します):
Host rke2-server1
HostName <あなたのパブリックIPアドレス1>
User root
Host rke2-server2
HostName <あなたのパブリックIPアドレス2>
User root
Host rke2-server3
HostName <あなたのパブリックIPアドレス3>
User root
Host rke2-agent1
HostName <あなたのパブリックIPアドレス4>
User root
Host rke2-agent2
HostName <あなたのパブリックIPアドレス5>
User root
上記のコードはすべてのクラウドサーバーに SSH エイリアスを設定するもので、これにより今後の運用操作が大幅に簡素化されます。次に、SSH 公開鍵をターゲットサーバーにアップロードします:
ssh-copy-id rke2-server1
ssh-copy-id rke2-server2
ssh-copy-id rke2-server3
ssh-copy-id rke2-agent1
ssh-copy-id rke2-agent2
以前にシステムを再インストールしたことがある場合は、まず SSH フィンガープリントをクリーンアップする必要があるかもしれません:
ssh-keygen -R rke2-server1
ssh-keygen -R rke2-server2
ssh-keygen -R rke2-server3
ssh-keygen -R rke2-agent1
ssh-keygen -R rke2-agent2
プロンプトに従って操作してください。
完了すると、すべてのクラウドサーバーにパスワードなしでログインできるようになります:
ssh rke2-server1
ssh rke2-server2
ssh rke2-server3
ssh rke2-agent1
ssh rke2-agent2
ログイン後に、耐量子計算機暗号アルゴリズムを使用していないため将来的にハッカーに攻撃される可能性があるという警告が表示される場合がありますが(かなり未来の話ですね)、これは無視して構いません。
** WARNING: connection is not using a post-quantum key exchange algorithm.
** This session may be vulnerable to "store now, decrypt later" attacks.
** The server may need to be upgraded. See https://openssh.com/pq.html
Last failed login: ~~ from ~~ on ssh:notty There were 31 failed login attempts since the last successful login.
初始化 Ansible 项目
リポジトリの初期化
まずフォルダを作成します。プロジェクト名を rke2-ansible とします。
yun@yun ~/V/a/y/p/ansible (main)> mkdir rke2-ansible
yun@yun ~/V/a/y/p/ansible (main)> ls
rke2-ansible/
プロジェクトリポジトリに入り、git を初期化し、GitHub パブリックリポジトリを作成します:
cd rke2-ansible
git init
echo "# rke2-ansible" > README.md
git add .
git commit -m "chore: initial commit"
gh repo create rke2-ansible --private --source=. --remote=origin --push
以下のコードはオプションで、新しく作成したコードリポジトリをサブモジュールとして宣言するために使用します:
cd ..
rm -rf rke2-ansible/
git submodule add https://github.com/yunzaixi-dev/rke2-ansible.git ./rke2-ansible
ディレクトリ構造の設計
次に、プロジェクト構造を分割します:
mkdir -p inventories/prod \
group_vars \
host_vars \
playbooks \
roles
空のファイルを作成します:
touch ansible.cfg \
requirements.yml \
inventories/prod/hosts.yml \
group_vars/all.yml \
group_vars/rke2_servers.yml \
group_vars/rke2_agents.yml \
host_vars/rke2-server1.yml \
playbooks/site.yml \
playbooks/ping.yml \
playbooks/update-packages.yml \
playbooks/set-hostname.yml \
playbooks/disable-ssh-password.yml
ディレクトリ構造は以下の通りです:
yun@yun ~/V/a/y/p/a/rke2-ansible (master)> tree
.
├── ansible.cfg
├── group_vars
│ ├── all.yml
│ ├── rke2_agents.yml
│ └── rke2_servers.yml
├── host_vars
│ └── rke2-server1.yml
├── inventories
│ └── prod
│ └── hosts.yml
├── playbooks
│ ├── disable-ssh-password.yml
│ ├── ping.yml
│ ├── site.yml
│ ├── update-packages.yml
│ └── set-hostname.yml
├── README.md
├── requirements.yml
└── roles
各ディレクトリとファイルの説明:
ansible.cfg: Ansible のグローバル設定。inventory と roles_path を指定します。requirements.yml: Galaxy 依存関係リスト。lablabs.rke2ロールのインストールに使用します。inventories/prod/hosts.yml: 本番環境のホストリストとグループ分け。group_vars/*.yml: ホストグループ変数。クラスター共通パラメータと server/agent 用に分かれています。host_vars/rke2-server1.yml: 個別ホスト変数。最初のコントロールプレーンの初期化を宣言するために使用します。playbooks/site.yml: デプロイのエントリポイント。システムの準備と RKE2 のインストールプロセスを含みます。playbooks/ping.yml: 接続確認 Playbook。ホストへの到達可能性を検証します。playbooks/update-packages.yml: 一括更新 Playbook。システムパッケージのアップグレードに使用します。playbooks/set-hostname.yml: ホスト名の一括設定。-を保持し、不正な文字をクリーンアップします。playbooks/disable-ssh-password.yml: SSH パスワードログインを無効にし、鍵ログインのみを許可します。roles/: Galaxy でダウンロードされたロールのディレクトリ。
Galaxy Role のインストール
micro requirements.yml :
roles:
- name: lablabs.rke2
version: "1.49.1"
lablabs.rke2はコミュニティによって維持されている RKE2 Role です。GitHub リポジトリ: https://github.com/lablabs/ansible-role-rke2。公式のインストールスクリプトとサービス管理ロジックがカプセル化されています。バージョンを1.49.1に固定することで、デプロイプロセスの再現性を確保し、ア���プストリームの更新による不確実性を低減します。
依存関係をインストールします:
ansible-galaxy role install -r requirements.yml -p roles
yun@yun ~/V/a/y/p/a/rke2-ansible (master)> ansible-galaxy role install -r requirements.yml -p
roles
Starting galaxy role install process
- downloading role 'rke2', owned by lablabs
- downloading role from https://github.com/lablabs/ansible-role-rke2/archive/1.49.1.tar.gz
- extracting lablabs.rke2 to /home/yun/Vaults/admin/yunzaixi-dev/project/ansible/rke2-ansible/roles/lablabs.rke2
- lablabs.rke2 (1.49.1) was installed successfully
Ansible の設定
micro ansible.cfg (interpreter_python のパスは自身の環境に合わせて調整してください):
[defaults]
inventory = inventories/prod/hosts.yml
remote_user = root
host_key_checking = False
roles_path = ./roles
forks = 10
timeout = 30
deprecation_warnings = False
stdout_callback = default
result_format = yaml
interpreter_python = /usr/bin/python3
inventory の作成
micro inventories/prod/hosts.yml :
all:
children:
rke2_servers:
hosts:
rke2-server1:
rke2-server2:
rke2-server3:
rke2_agents:
hosts:
rke2-agent1:
rke2-agent2:
rke2_cluster:
children:
rke2_servers:
rke2_agents:
前述の通り SSH Config を設定しているため、ここではホストエイリアスを直接使用でき、
ansible_hostを別途入力する必要はありません。
接続確認
micro playbooks/ping.yml :
- name: Ping all hosts
hosts: all
gather_facts: false
tasks:
- name: Ping
ansible.builtin.ping:
実行:
ansible-playbook playbooks/ping.yml
出力は以下の通りです:
yun@yun ~/V/a/y/p/a/rke2-ansible (master)> ansible-playbook playbooks/ping.yml
PLAY [Ping all hosts] ***********************************************************************
TASK [Ping] *********************************************************************************
ok: [rke2-agent1]
ok: [rke2-agent2]
ok: [rke2-server2]
ok: [rke2-server1]
ok: [rke2-server3]
PLAY RECAP **********************************************************************************
rke2-agent1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rke2-agent2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rke2-server1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rke2-server2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rke2-server3 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ホスト名の一括設定
ホスト名に
_を含めることはできません。
micro playbooks/set-hostname.yml :
- name: Set hostname from SSH alias
hosts: all
become: true
vars:
raw_hostname: "{{ inventory_hostname | lower }}"
hostname_from_alias: "{{ raw_hostname | regex_replace('[^a-z0-9-]', '') | regex_replace('^-+', '') | regex_replace('-+$', '') }}"
tasks:
- name: Ensure hostname is not empty
ansible.builtin.assert:
that:
- hostname_from_alias | length > 0
fail_msg: "Derived hostname is empty. Check inventory_hostname: {{ inventory_hostname }}"
- name: Set hostname
ansible.builtin.hostname:
name: "{{ hostname_from_alias }}"
実行:
ansible-playbook playbooks/set-hostname.yml
結果は以下の通りです:
yun@yun ~/V/a/y/p/a/rke2-ansible (master)> ansible-playbook playbooks/set-hostname.yml
PLAY [Set hostname from SSH alias] **********************************************************
TASK [Gathering Facts] **********************************************************************
ok: [rke2-server3]
ok: [rke2-server2]
ok: [rke2-server1]
ok: [rke2-agent2]
ok: [rke2-agent1]
TASK [Ensure hostname is not empty] *********************************************************
ok: [rke2-server1] => {
"changed": false,
"msg": "All assertions passed"
}
ok: [rke2-server2] => {
"changed": false,
"msg": "All assertions passed"
}
ok: [rke2-server3] => {
"changed": false,
"msg": "All assertions passed"
}
ok: [rke2-agent1] => {
"changed": false,
"msg": "All assertions passed"
}
ok: [rke2-agent2] => {
"changed": false,
"msg": "All assertions passed"
}
TASK [Set hostname] *************************************************************************
changed: [rke2-agent1]
changed: [rke2-server1]
changed: [rke2-server3]
changed: [rke2-server2]
changed: [rke2-agent2]
PLAY RECAP **********************************************************************************
rke2-agent1 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rke2-agent2 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rke2-server1 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rke2-server2 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rke2-server3 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
SSH パスワードログインを無効にする (オプション)
実行前に、サーバーからロックアウトされないよう、鍵ログインが設定されていることを確認してください。
micro playbooks/disable-ssh-password.yml :
- name: Disable SSH password authentication
hosts: all
become: true
tasks:
- name: Write SSH hardening config
ansible.builtin.copy:
dest: /etc/ssh/sshd_config.d/99-disable-password.conf
mode: "0644"
content: |
PasswordAuthentication no
KbdInteractiveAuthentication no
ChallengeResponseAuthentication no
notify: Restart sshd
- name: Validate sshd config
ansible.builtin.command: sshd -t
changed_when: false
handlers:
- name: Restart sshd
ansible.builtin.service:
name: sshd
state: restarted
実行:
ansible-playbook playbooks/disable-ssh-password.yml
出力は以下の通りです:
yun@yun ~/V/a/y/p/a/rke2-ansible (master)> ansible-playbook playbooks/disable-ssh-password.yml
PLAY [Disable SSH password authentication] **************************************************
TASK [Gathering Facts] **********************************************************************
ok: [rke2-agent1]
ok: [rke2-server3]
ok: [rke2-agent2]
ok: [rke2-server1]
ok: [rke2-server2]
TASK [Write SSH hardening config] ***********************************************************
changed: [rke2-server3]
changed: [rke2-agent1]
changed: [rke2-server2]
changed: [rke2-server1]
changed: [rke2-agent2]
TASK [Validate sshd config] *****************************************************************
ok: [rke2-server3]
ok: [rke2-agent1]
ok: [rke2-server2]
ok: [rke2-agent2]
ok: [rke2-server1]
RUNNING HANDLER [Restart sshd] **************************************************************
changed: [rke2-server2]
changed: [rke2-server3]
changed: [rke2-server1]
changed: [rke2-agent2]
changed: [rke2-agent1]
PLAY RECAP **********************************************************************************
rke2-agent1 : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rke2-agent2 : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rke2-server1 : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rke2-server2 : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rke2-server3 : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
システムパッケージの一括更新と再起動 (推奨)
Rocky Linux 9 上でシステムパッケージの更新のみが必要な場合に適しています。 再起動が不要な場合は、
reboot_after_updateをfalseに設定してください。
micro playbooks/update-packages.yml :
- name: Update Rocky Linux packages
hosts: all
become: true
serial: 1
vars:
reboot_after_update: true
tasks:
- name: Update package metadata
ansible.builtin.dnf:
update_cache: true
- name: Upgrade all packages
ansible.builtin.dnf:
name: "*"
state: latest
- name: Remove unneeded packages
ansible.builtin.dnf:
autoremove: true
- name: Clean package cache
ansible.builtin.command: dnf clean all
changed_when: false
- name: Reboot after update (optional)
ansible.builtin.reboot:
reboot_timeout: 3600
when: reboot_after_update
実行:
ansible-playbook playbooks/update-packages.yml
出力は以下の通りです:
yun@yun ~/V/a/y/p/a/rke2-ansible (master)> ansible-playbook playbooks/update-packages.yml
PLAY [Update Rocky Linux packages] **********************************************************
TASK [Gathering Facts] **********************************************************************
ok: [rke2-server1]
TASK [Update package metadata] **************************************************************
ok: [rke2-server1]
TASK [Upgrade all packages] *****************************************************************
ok: [rke2-server1]
TASK [Remove unneeded packages] *************************************************************
ok: [rke2-server1]
TASK [Clean package cache] ******************************************************************
ok: [rke2-server1]
TASK [Reboot after update (optional)] *******************************************************
changed: [rke2-server1]
PLAY [Update Rocky Linux packages] **********************************************************
TASK [Gathering Facts] **********************************************************************
ok: [rke2-server2]
TASK [Update package metadata] **************************************************************
ok: [rke2-server2]
TASK [Upgrade all packages] *****************************************************************
changed: [rke2-server2]
TASK [Remove unneeded packages] *************************************************************
ok: [rke2-server2]
TASK [Clean package cache] ******************************************************************
ok: [rke2-server2]
TASK [Reboot after update (optional)] *******************************************************
changed: [rke2-server2]
PLAY [Update Rocky Linux packages] **********************************************************
TASK [Gathering Facts] **********************************************************************
ok: [rke2-server3]
TASK [Update package metadata] **************************************************************
ok: [rke2-server3]
TASK [Upgrade all packages] *****************************************************************
changed: [rke2-server3]
TASK [Remove unneeded packages] *************************************************************
ok: [rke2-server3]
TASK [Clean package cache] ******************************************************************
ok: [rke2-server3]
TASK [Reboot after update (optional)] *******************************************************
changed: [rke2-server3]
PLAY [Update Rocky Linux packages] **********************************************************
TASK [Gathering Facts] **********************************************************************
ok: [rke2-agent1]
TASK [Update package metadata] **************************************************************
ok: [rke2-agent1]
TASK [Upgrade all packages] *****************************************************************
changed: [rke2-agent1]
TASK [Remove unneeded packages] *************************************************************
ok: [rke2-agent1]
TASK [Clean package cache] ******************************************************************
ok: [rke2-agent1]
TASK [Reboot after update (optional)] *******************************************************
changed: [rke2-agent1]
PLAY [Update Rocky Linux packages] **********************************************************
TASK [Gathering Facts] **********************************************************************
ok: [rke2-agent2]
TASK [Update package metadata] **************************************************************
ok: [rke2-agent2]
TASK [Upgrade all packages] *****************************************************************
changed: [rke2-agent2]
TASK [Remove unneeded packages] *************************************************************
ok: [rke2-agent2]
TASK [Clean package cache] ******************************************************************
ok: [rke2-agent2]
TASK [Reboot after update (optional)] *******************************************************
changed: [rke2-agent2]
PLAY RECAP **********************************************************************************
rke2-agent1 : ok=6 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rke2-agent2 : ok=6 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rke2-server1 : ok=6 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rke2-server2 : ok=6 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rke2-server3 : ok=6 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
部署 RKE2
RKE2 変数の作成
lablabs.rke2のrke2_configはテンプレートパス(デフォルトはtemplates/config.yaml.j2)であり、辞書形式で記述しないでください。config.yamlに書き込む必要があるパラメータは、rke2_server_options/rke2_agent_optionsに配置してください。
micro group_vars/all.yml :
rke2_cluster_group_name: "rke2_cluster"
rke2_servers_group_name: "rke2_servers"
rke2_agents_group_name: "rke2_agents"
rke2_channel: "latest"
rke2_version: "v1.34.2+rke2r1"
rke2_token: "CHANGE_ME"
rke2_api_ip: "<LBまたはserver1>"
rke2_additional_sans:
- "<LBまたはserver1>"
rke2_selinux: true
rke2_cni:
- cilium
rke2_tokenはクラスター登録用の共有キーであり、すべてのノードで一致している必要があります。rke2_api_ipはコントロールプレーンの入り口アドレスです。LB/VIP がある場合は LB/VIP の IP またはドメイン名を入力し、LB/VIP がなく各マシンに固定のシングル IP しかない場合は、最初のコントロールプレーン(例:rke2-server1)の IP/ドメイン名を入力し、その値をrke2_additional_sansにも同期して追加します。この設定は API を単一ノードに固定することと同等であり、コントロールプレーンの入り口が高可用性ではなくなるため、本番環境では LB/VIP の使用を推奨します。rke2_tokenはopenssl rand -base64 32で生成できます。 Rocky Linux でデフォルトで SELinux が有効な場合は、必ずrke2_selinux: trueを設定し、container-selinuxがインストールされていることを確認してください。Cilium を使用する場合は、rke2_cniをciliumに指定します。
micro group_vars/rke2_servers.yml :
rke2_server_options:
- write-kubeconfig-mode: "0644"
micro group_vars/rke2_agents.yml :
rke2_agent_options:
- node-ip: "{{ ansible_default_ipv4.address }}"
最初のコントロールプレーンを初期化ノードとしてマークします。micro host_vars/rke2-server1.yml :
rke2_server_options:
- write-kubeconfig-mode: "0644"
- cluster-init: true
Playbook の作成
micro playbooks/site.yml :
- name: Base setup
hosts: all
become: true
tasks:
- name: Install base packages
ansible.builtin.package:
name:
- curl
- tar
- socat
- conntrack
- iptables
- container-selinux
state: present
- name: Disable swap
ansible.builtin.command: swapoff -a
when: ansible_swaptotal_mb | int > 0
changed_when: false
- name: Remove swap from fstab
ansible.builtin.replace:
path: /etc/fstab
regexp: '^(.*\\sswap\\s.*)$'
replace: '# \\1'
- name: Load br_netfilter
ansible.builtin.modprobe:
name: br_netfilter
state: present
- name: Enable sysctl for Kubernetes
ansible.builtin.sysctl:
name: "{{ item.name }}"
value: "{{ item.value }}"
state: present
reload: true
loop:
- { name: net.bridge.bridge-nf-call-iptables, value: 1 }
- { name: net.bridge.bridge-nf-call-ip6tables, value: 1 }
- { name: net.ipv4.ip_forward, value: 1 }
- name: RKE2 servers
hosts: rke2_servers
become: true
serial: 1
roles:
- role: lablabs.rke2
- name: RKE2 agents
hosts: rke2_agents
become: true
roles:
- role: lablabs.rke2
部署与验证
デプロイの実行
まず構文チェックを行います:
ansible-playbook playbooks/site.yml --syntax-check
デプロイを実行します:
ansible-playbook playbooks/site.yml
kubeconfig の取得
任意のコントロールプレーンノードにログインし、kubeconfig をエクスポートします:
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
rke2 kubectl get nodes -o wide
ローカルで kubectl を使用する場合は、kubeconfig をコピーできます:
mkdir -p ~/.kube
scp rke2-server1:/etc/rancher/rke2/rke2.yaml ~/.kube/rke2.yaml
sed -i 's/127.0.0.1/<LBまたはserver1>/g' ~/.kube/rke2.yaml
export KUBECONFIG=~/.kube/rke2.yaml
kubectl get nodes -o wide
これで、最小構成の高可用性 RKE2 クラスターのデプロイが完了しました。